package com.gxa.mapper;

import com.gxa.common.vo.AppointmentSettingVo;
import com.gxa.entity.SysReservationSet;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author MacieSerenity
 */
public interface AppointmentSettingMapper {
    /**
     * 返回所有预约设置的信息
     *
     * @return 预约设置信息的列表
     */
    List<SysReservationSet> findAllSysReservation();

    /**
     * 查询所有为被删除的预约信息总数
     *
     * @return 预约信息的总数
     */
    Integer getAllActiveReservationCount();

    /**
     * 根据条件查询所有符合条件的数据数量
     *
     * @param query 查询条件，可以根据负责人名称，负责人职称，负责人的部门查询
     * @return 符合条件的列表
     */
    List<SysReservationSet> findAllSysReservationByQuery(@Param("query") String query);

    /**
     * 获取所有根据条件筛选后的数据大小
     *
     * @param query 查询条件
     * @return 筛选后的数据大小
     */
    Integer getAllActiveReservationWithQueryCount(@Param("query") String query);

    /**
     * 添加一个预约人
     *
     * @param appointmentSettingVo 添加的预约信息
     * @return 影响的行数
     */
    Integer insertAppointmentSetting(@Param("appointment") AppointmentSettingVo appointmentSettingVo);

    /**
     * 根据用户ID查询是否有已经存在的预约信息
     *
     * @param id 用户的ID
     * @return 预约信息
     */
    Integer getSysReservationCountByUserId(@Param("userId") Integer id);

    /**
     * 根据ID修改信息
     *
     * @param appointmentSettingVo 所有需要修改的而信息
     * @param date
     * @return 影响的行数
     */
    Integer updateSysReservationById(@Param("appointment") AppointmentSettingVo appointmentSettingVo, @Param("updateTime") Date date);

    /**
     * 根据传过来的ID，删除
     *
     * @param id 需要删除的ID
     * @return 影响的行数
     */
    Integer deleteSysReservationById(@Param("id") Integer id);

    /**
     * 根据用户 用户 用户 的ID查询该用户的预约总数
     *
     * @param id 用户的ID
     * @return 可预约总数
     */
    Integer getAppointmentLimitByUserId(@Param("id") Integer id);

    /**
     * 根据当前用户的ID查询目前有多少预约
     *
     * @param id 用户的ID
     * @return 返回目前预约人数
     */
    Integer getAppointmentNowNumberByUserId(@Param("id") Integer id);

    /**
     * 根据用户ID获取状态
     *
     * @param id 用户的ID
     * @return 状态 0 默认可预约  1 不可预约
     */
    Integer getAppointmentStatusByUserId(@Param("id") Integer id);

    /**
     * 根据用户的ID设置预约信息
     *
     * @param id     用户的ID（在表中唯一）
     * @param number 更改后的数量
     * @return 操作结果
     */
    Integer setAppointmentSettingNowNumberByUserId(@Param("id") Integer id, @Param("number") Integer number, @Param("updateTime") Date date);

    /**
     * 根据用户的ID获取单个预约设置的信息
     *
     * @param id 用户的ID
     * @return 预约设置信息
     */
    SysReservationSet getAppointmentByUserId(@Param("userId") Integer id);

    /**
     * 获取某个医生的最大预约天数
     *
     * @param userId 医生的ID
     * @return 最大预约天数
     */
    Integer getDaysByUserId(@Param("userId") Integer userId);

    /**
     * 根据预约ID获取预约的信息
     * @param id 预约信息单的ID
     * @return 预约信息
     */
    SysReservationSet getAppointmentById(@Param("id") Integer id);





}
